package com.pro01.backend.controller;

import com.pro01.backend.pojo.ForumPost;
import com.pro01.backend.pojo.PageResult;
import com.pro01.backend.pojo.Result;
import com.pro01.backend.service.ForumPostService;
import com.pro01.backend.utils.TokenUtil;
import jakarta.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/admin/forums")
public class AdminForumPostController {

    @Autowired
    private ForumPostService forumPostService;

    /**
     * 管理员查看当前板块下的所有帖子（包含已删除和已隐藏的）（分页）
     */
    @GetMapping("/{forumId}/posts")
    public Result<PageResult<ForumPost>> getPostsByForumForAdmin(@PathVariable Long forumId,
                                                                 @RequestParam(defaultValue = "1") int pageNum,
                                                                 @RequestParam(defaultValue = "10") int pageSize,
                                                                 HttpServletRequest request) {
        // 校验是否为管理员
        Long userId = TokenUtil.getUserId(request); // 获取当前登录用户
        String role = TokenUtil.getRole(request); // 获取当前用户角色

        if (!"ADMIN".equals(role)) {
            return Result.error("无权限，只有管理员可用！");
        }

        try {
            PageResult<ForumPost> pageResult = forumPostService.getPostsByForumForAdmin(forumId, pageNum, pageSize);
            return Result.success(pageResult);
        } catch (Exception e) {
            e.printStackTrace();
            return Result.error("获取帖子列表失败：" + e.getMessage());
        }
    }

    /**
     * 管理员删除帖子（软删除）
     */
    @DeleteMapping("/{forumId}/posts/{postId}")
    public Result<Void> deletePostByAdmin(@PathVariable Long forumId,
                                          @PathVariable Long postId,
                                          HttpServletRequest request) {
        // 校验是否为管理员
        Long userId = TokenUtil.getUserId(request); // 获取当前登录用户
        String role = TokenUtil.getRole(request); // 获取当前用户角色

        if (!"ADMIN".equals(role)) {
            return Result.error("无权限，只有管理员可用！");
        }

        try {
            forumPostService.deletePostByAdmin(postId, forumId);
            return Result.success();
        } catch (Exception e) {
            e.printStackTrace();
            return Result.error("删除帖子失败：" + e.getMessage());
        }
    }

    /**
     * 管理员恢复已删除或已隐藏的帖子（软恢复）
     */
    @PutMapping("/{forumId}/posts/{postId}/restore")
    public Result<Void> restorePost(@PathVariable Long forumId,
                                    @PathVariable Long postId,
                                    HttpServletRequest request) {
        // 校验是否为管理员
        Long userId = TokenUtil.getUserId(request); // 获取当前登录用户
        String role = TokenUtil.getRole(request); // 获取当前用户角色

        if (!"ADMIN".equals(role)) {
            return Result.error("无权限，只有管理员可用！");
        }

        try {
            forumPostService.restorePost(postId, forumId);
            return Result.success();
        } catch (Exception e) {
            e.printStackTrace();
            return Result.error("恢复帖子失败：" + e.getMessage());
        }
    }

    /**
     * 管理员将帖子设置为隐藏（HIDDEN）
     */
    @PutMapping("/{forumId}/posts/{postId}/hide")
    public Result<Void> hidePost(@PathVariable Long forumId,
                                 @PathVariable Long postId,
                                 HttpServletRequest request) {
        // 校验是否为管理员
        Long userId = TokenUtil.getUserId(request); // 获取当前登录用户
        String role = TokenUtil.getRole(request); // 获取当前用户角色

        if (!"ADMIN".equals(role)) {
            return Result.error("无权限，只有管理员可用！");
        }

        try {
            forumPostService.hidePost(postId, forumId);
            return Result.success();
        } catch (Exception e) {
            e.printStackTrace();
            return Result.error("隐藏帖子失败：" + e.getMessage());
        }
    }

    /**
     * 管理员置顶帖子
     */
    @PutMapping("/{forumId}/posts/{postId}/pin")
    public Result<Void> pinPost(@PathVariable Long forumId,
                                @PathVariable Long postId,
                                HttpServletRequest request) {
        // 校验是否为管理员
        Long userId = TokenUtil.getUserId(request); // 获取当前登录用户
        String role = TokenUtil.getRole(request); // 获取当前用户角色

        if (!"ADMIN".equals(role)) {
            return Result.error("无权限，只有管理员可用！");
        }

        try {
            forumPostService.pinPost(postId, forumId);
            return Result.success();
        } catch (Exception e) {
            e.printStackTrace();
            return Result.error("置顶帖子失败：" + e.getMessage());
        }
    }

    /**
     * 管理员取消置顶帖子
     */
    @PutMapping("/{forumId}/posts/{postId}/unpin")
    public Result<Void> unpinPost(@PathVariable Long forumId,
                                  @PathVariable Long postId,
                                  HttpServletRequest request) {
        // 校验是否为管理员
        Long userId = TokenUtil.getUserId(request);
        String role = TokenUtil.getRole(request);

        if (!"ADMIN".equals(role)) {
            return Result.error("无权限，只有管理员可用！");
        }

        try {
            forumPostService.unpinPost(postId, forumId);
            return Result.success();
        } catch (Exception e) {
            e.printStackTrace();
            return Result.error("取消置顶失败：" + e.getMessage());
        }
    }

}
